upfluence/http/server: add dedicated admin server to prevent thread starvation#38
Open
AlexisMontagne wants to merge 1 commit into
Open
upfluence/http/server: add dedicated admin server to prevent thread starvation#38AlexisMontagne wants to merge 1 commit into
AlexisMontagne wants to merge 1 commit into
Conversation
…all the control endpoints
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
In our current setup, Puma has a limited thread pool shared between all incoming requests — unlike our Go servers. This creates two compounding problems during traffic spikes or slow request periods:
This PR introduces an optional admin server (env:
ADMIN_PORT) that binds a separate Puma listener exclusively for control plane traffic. The production builder handles application requests; the admin builder handles/healthcheck, the Prometheus exporter, the Thrift base processor, and/debug. The two are fully isolated — a saturated production thread pool has no impact on admin traffic.admin_portoption (env:ADMIN_PORT); when set, spins a side thread binding the admin builder on that port/healthcheck, prometheus exporter, base thrift processor, and/debugon the admin builder; keep the production builder cleanrequire 'sinatra'withrequire 'sinatra/base'in both api_endpoint files —sinatra/mainregisters anat_exithook that starts a WEBrick server and blocks process exitserver_spec.rbcovering both builders, healthcheck, debug mount, and custom healthcheck endpoint